using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._DataReviewerTools._ResultManagement
{
    /// <summary>
    /// <para>Create Reviewer Session</para>
    /// <para>Creates a new Reviewer session in the specified workspace.</para>
    /// <para>在指定工作空间中创建新的 Reviewer 会话。</para>
    /// </summary>    
    [DisplayName("Create Reviewer Session")]
    public class CreateReviewerSession : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public CreateReviewerSession()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_reviewer_workspace">
        /// <para>Reviewer Workspace</para>
        /// <para>The workspace in which a new Reviewer session will be created.</para>
        /// <para>将在其中创建新 Reviewer 会话的工作空间。</para>
        /// </param>
        /// <param name="_session_name">
        /// <para>Session Name</para>
        /// <para>The name of the session that will be created in the Reviewer workspace.</para>
        /// <para>将在检查器工作空间中创建的会话的名称。</para>
        /// </param>
        public CreateReviewerSession(object _reviewer_workspace, object _session_name)
        {
            this._reviewer_workspace = _reviewer_workspace;
            this._session_name = _session_name;
        }
        public override string ToolboxName => "Data Reviewer Tools";

        public override string ToolName => "Create Reviewer Session";

        public override string CallName => "Reviewer.CreateReviewerSession";

        public override List<string> AcceptEnvironments => ["workspace"];

        public override object[] ParameterInfo => [_reviewer_workspace, _session_name, _session_template, _session, _duplicate_checking.GetGPValue(), _store_geometry.GetGPValue(), _username, _version];

        /// <summary>
        /// <para>Reviewer Workspace</para>
        /// <para>The workspace in which a new Reviewer session will be created.</para>
        /// <para>将在其中创建新 Reviewer 会话的工作空间。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Reviewer Workspace")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _reviewer_workspace { get; set; }


        /// <summary>
        /// <para>Session Name</para>
        /// <para>The name of the session that will be created in the Reviewer workspace.</para>
        /// <para>将在检查器工作空间中创建的会话的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Session Name")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _session_name { get; set; }


        /// <summary>
        /// <para>Session Template</para>
        /// <para>An existing Reviewer session whose properties will be copied to the new session.</para>
        /// <para>现有 Reviewer 会话，其属性将复制到新会话。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Session Template")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _session_template { get; set; } = null;


        /// <summary>
        /// <para>Reviewer Session</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Reviewer Session")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _session { get; set; }


        /// <summary>
        /// <para>Check For Duplicates</para>
        /// <para><xdoc>
        ///   <para>Specifies how duplicate validation results are handled in the session.</para>
        ///   <bulletList>
        ///     <bullet_item>None—Does not search for duplicate validation results. This will improve performance when writing validation results to the database. This is the default.</bullet_item><para/>
        ///     <bullet_item>Session—Searches within the session for duplicate validation results.</bullet_item><para/>
        ///     <bullet_item>Database—Searches the entire database for duplicate validation results.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定在会话中如何处理重复的验证结果。</para>
        ///   <bulletList>
        ///     <bullet_item>无 （None） - 不搜索重复的验证结果。这将提高将验证结果写入数据库时的性能。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>会话 - 在会话中搜索重复的验证结果。</bullet_item><para/>
        ///     <bullet_item>数据库 - 在整个数据库中搜索重复的验证结果。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Check For Duplicates")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _duplicate_checking_value _duplicate_checking { get; set; } = _duplicate_checking_value._NONE;

        public enum _duplicate_checking_value
        {
            /// <summary>
            /// <para>Database</para>
            /// <para>Database—Searches the entire database for duplicate validation results.</para>
            /// <para>数据库 - 在整个数据库中搜索重复的验证结果。</para>
            /// </summary>
            [Description("Database")]
            [GPEnumValue("DATABASE")]
            _DATABASE,

            /// <summary>
            /// <para>Session</para>
            /// <para>Session—Searches within the session for duplicate validation results.</para>
            /// <para>会话 - 在会话中搜索重复的验证结果。</para>
            /// </summary>
            [Description("Session")]
            [GPEnumValue("SESSION")]
            _SESSION,

            /// <summary>
            /// <para>None</para>
            /// <para>None—Does not search for duplicate validation results. This will improve performance when writing validation results to the database. This is the default.</para>
            /// <para>无 （None） - 不搜索重复的验证结果。这将提高将验证结果写入数据库时的性能。这是默认设置。</para>
            /// </summary>
            [Description("None")]
            [GPEnumValue("NONE")]
            _NONE,

        }

        /// <summary>
        /// <para>Do Not Store Geometry</para>
        /// <para><xdoc>
        ///   <para>Specifies whether results will include an associated geometry.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—Results will include only attribute information. This can improve performance when writing validation results to the geodatabase.</bullet_item><para/>
        ///     <bullet_item>Unchecked—Results will include both geometry and attribute information. This is the default.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定结果是否包括关联的几何图形。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 结果将仅包含属性信息。这可以提高将验证结果写入地理数据库时的性能。</bullet_item><para/>
        ///     <bullet_item>未选中 - 结果将包括几何和属性信息。这是默认设置。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Do Not Store Geometry")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _store_geometry_value _store_geometry { get; set; } = _store_geometry_value._false;

        public enum _store_geometry_value
        {
            /// <summary>
            /// <para>STORE_GEOMETRY</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("STORE_GEOMETRY")]
            [GPEnumValue("false")]
            _false,

            /// <summary>
            /// <para>DO_NOT_STORE_GEOMETRY</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("DO_NOT_STORE_GEOMETRY")]
            [GPEnumValue("true")]
            _true,

        }

        /// <summary>
        /// <para>Session User Name</para>
        /// <para>The user name of the person creating the Reviewer session. The default is the Windows user who is currently logged in.</para>
        /// <para>创建检查器会话的人员的用户名。默认值为当前登录的 Windows 用户。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Session User Name")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _username { get; set; } = null;


        /// <summary>
        /// <para>Session Version</para>
        /// <para>The enterprise geodatabase version with which the session will be associated. This parameter is only enabled when you choose a Reviewer workspace stored in an enterprise geodatabase.</para>
        /// <para>将与会话关联的企业级地理数据库版本。仅当您选择存储在企业级地理数据库中的 Reviewer 工作空间时，才会启用此参数。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Session Version")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _version { get; set; } = null;


        public CreateReviewerSession SetEnv(object workspace = null)
        {
            base.SetEnv(workspace: workspace);
            return this;
        }

    }

}